#pragma once
#include "vtkobject.h"
#include "vtkSlicerApplication.h"
#include "TestGUI.h"
class CustomToolBar;
class CustomMenu;
class EndoscopeLogic;
class /*__declspec( dllexport )*/ CustomModule :
	public vtkObject
{
public:
	static CustomModule * GetInstance();
	virtual ~CustomModule(void);
	vtkGetMacro (MyToolbar, CustomToolBar *);
	vtkGetMacro (MyMenu, CustomMenu *);
	vtkGetMacro (Endoscopegui, EndoscopeGUI *);
	vtkGetMacro (ESLogic, EndoscopeLogic *);

	vtkSetObjectMacro (Application, vtkSlicerApplication);
	vtkSetObjectMacro (ApplicationLogic, vtkSlicerApplicationLogic);
	vtkSetObjectMacro (MRMLSene, vtkMRMLScene );

	vtkSetMacro(TclInterp, Tcl_Interp *);
	vtkGetMacro(TclInterp, Tcl_Interp *);
private:
		static CustomModule * OnlyOneInstance;
		CustomToolBar * MyToolbar;
		CustomMenu * MyMenu;
		EndoscopeLogic * ESLogic;
		EndoscopeGUI * Endoscopegui;

		vtkSlicerApplication * Application;
		vtkSlicerApplicationLogic *ApplicationLogic;
		vtkMRMLScene * MRMLSene;
		Tcl_Interp * TclInterp;


protected:
	CustomModule(void);
	// Not Implemented
	CustomModule (const CustomModule &);
	void operator = (const CustomModule &);
public:
	void MainGUIInitialize(void);
public:
	void InitializeModules(void);
};
